// #include <stdio.h>
// #include <stdlib.h>
// #include <Windows.h>
// #include <stdbool.h>
// #define MAXSIZE 100
//
// typedef int ElemType;
// //栈结构
// typedef struct Stack {
//     ElemType arr[MAXSIZE];
//     int top1;
//     int top2;
// }Stack;
//
// //初始化栈
// void InitStack(Stack* S) {
//     S->top1=-1;
//     S->top2=MAXSIZE;
// }
//
// //判断栈1空
// bool IsNullStack1(Stack* S) {
//     return S->top1==-1;
// }
//
// //判断栈1满
// bool IsFullStack1(Stack* S) {
//     return S->top1+1==S->top2;
// }
//
// //判断栈2空
// bool IsNullStack2(Stack* S) {
//     return S->top2==MAXSIZE;
// }
//
// //判断栈2满
// bool IsFullStack2(Stack* S) {
//     return S->top2-1==S->top1;
// }
//
// //栈1入栈
// void PushSharedStack1(Stack* S,ElemType value) {
//     if(IsFullStack1(S)) {
//         printf("栈1已满\n");
//         return;
//     }
//     S->top1=S->top1+1;
//     S->arr[S->top1]=value;
// }
//
// //栈1出栈
// void PopSharedStack1(Stack* S,ElemType* value) {
//     if(IsNullStack1(S)) {
//         printf("栈1为空\n");
//         return;
//     }
//     *value=S->arr[S->top1];
//     S->top1=S->top1-1;
// }
//
// //栈2入栈
// void PushSharedStack2(Stack* S,ElemType value) {
//     if(IsFullStack2(S)) {
//         printf("栈2已满\n");
//         return;
//     }
//     S->top2=S->top2-1;
//     S->arr[S->top2]=value;
// }
//
// //栈2出栈
// void PopSharedStack2(Stack* S,ElemType* value) {
//     if(IsNullStack2(S)) {
//         printf("栈2为空\n");
//         return;
//     }
//     *value=S->arr[S->top2];
//     S->top2=S->top2+1;
// }
//
// //打印栈1
// void PrintStack1(Stack* S) {
//     for(int i=0;i<=S->top1;i++) {
//         printf("%d ",S->arr[i]);
//     }
//     printf("\n");
// }
// //打印栈2
// void PrintStack2(Stack* S) {
//     for(int i=MAXSIZE-1;i>=S->top2;i--) {
//         printf("%d ",S->arr[i]);
//     }
//     printf("\n");
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     Stack S;
//     InitStack(&S);
//     //栈1入栈
//     PushSharedStack1(&S,1);
//     PushSharedStack1(&S,2);
//     PushSharedStack1(&S,3);
//     PushSharedStack1(&S,4);
//     PushSharedStack1(&S,5);
//     //栈2入栈
//     PushSharedStack2(&S,6);
//     PushSharedStack2(&S,7);
//     PushSharedStack2(&S,8);
//     PushSharedStack2(&S,9);
//     PushSharedStack2(&S,10);
//
//     //打印栈1
//     PrintStack1(&S);
//     //打印栈2
//     PrintStack2(&S);
//
//     return 0;
// }